package com.wn.demo01;

/**
 * @author yellow Docter
 * @date 2022 -10-28
 * @desc
 *
 * lambda 表达式语法:
 *  1、有函数式接口
 *  2、语法：
 *     参数->{
 *         方法的具体实现
 *     }吗
 *  3、注意事项：
 *   1、参数可以类型推断 可以不用写数据类型
 *   2、如果参数的只有一个.参数的括号可以省略
 *   3、如果没有参数需要写()
 *
 *   4、如果只有一行代码，右边的{} 可以省略，如果多行代码不能省略
 *   5、如果有返回值,只有一行代码,{} 可以省略,return 也可以省略
 *
 */
public class Demo01 {

    public static void main(String[] args) {

//        demo01();

        demo02();
    }


    private static void demo02() {

//        MyFunction2<Integer> myFunction2 = new MyFunction2<Integer>() {
//            @Override
//            public Integer math(Integer t1, Integer t2) {
//                return t1 + t2;
//            }
//        };
//        Integer math = myFunction2.math(1, 2);
//        System.out.println("math = " + math);

       MyFunction2<Integer> myFunction2= (t1,t2)-> t1+t2;
        Integer math = myFunction2.math(1, 2);
        System.out.println("math = " + math);
    }

    private static void demo01() {

        //内部内的写法:
//        MyFunction<String> myFunction = new MyFunction<String>() {
//            @Override
//            public void consumer(String s) {
//                System.out.println("s = " + s);
//            }
//        };
//
//        myFunction.consumer("hello");

        //lambda 写法
        MyFunction<String> stringMyFunction = msg -> System.out.println("msg = " + msg);;
        stringMyFunction.consumer("hello");

//        new Thread(new Runnable() {
//            @Override
//            public void run() {
//                System.out.println("stringMyFunction = " + stringMyFunction);
//            }
//        }).start();

        new Thread(()->{
            System.out.println("Demo01.demo01");
        }).start();

    }

}
